package com.obelisco.modelo.dao.hibernate;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;

import com.obelisco.modelo.dao.ISitioDAO;
import com.obelisco.modelo.data.Dominio;
import com.obelisco.modelo.data.Sitio;

public class SitioDAO extends HibernateDAO  implements
		ISitioDAO {

	public Sitio findByPK(Serializable clave) {
		try {
			Sitio data = (Sitio) getHibernateTemplate().get(
						"com.obelisco.modelo.data.Sitio", clave);
				return data.getEstado().equals("B") ?  null : data;        	
		} catch (RuntimeException re) {
			throw re;
		}
	}

	public List loadAll() {
		try {
			List lista = getHibernateTemplate().find(
					"from Sitio sitio where sitio.estado != 'B'");
			return lista;
		} catch (RuntimeException re) {
			throw re;
		}
	}

	public void delete(Sitio objeto) {
		// TODO Auto-generated method stub
	}

	public void save(Sitio objeto) {
		try {
			getHibernateTemplate().saveOrUpdate(objeto);
		} catch (RuntimeException re) {
			throw re;
		}
	}

	public List findByProperty(String nombre, Object valor) {
		try {
			String queryString = "from Sitio as modelo where modelo."
					+ nombre + "= ?";
			return getHibernateTemplate().find(queryString, valor);
		} catch (RuntimeException re) {
			throw re;
		}
	}
	
	public List findByDominio(String dominio) {
		Session session = getSession();
		try {
			Criteria c = session.createCriteria(Dominio.class);
			c.add(Expression.eq("id.nombre", dominio));
			List list = c.list();
			
			List sitios = new ArrayList();
			for (Iterator i = list.iterator(); i.hasNext();) {
				Dominio d = (Dominio) i.next();
				System.out.println(d.getId().getSitio());
				sitios.add(d.getId().getSitio());
			}

			return sitios;
		} catch (RuntimeException re) {
			throw re;
		}
	}

}
